package modelos;
import java.sql.*;
import java.io.*;
import java.util.LinkedList;
import java.util.List;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author diegoarmandocontrerashernandez
 */
public class Usuario {
     Connection conn;
   Statement stmt;
   
   private int idUsuario;
   private String nombre;
   private String nombreUsuario;
   private String contrasena;
   private String contacto;
   private String fechaRegistro;
   private String direccion;
   private int estatus;
   
   public Usuario(){
       try {
        String userName = "root";
        String password = "";
        String url = "jdbc:mysql://localhost/Seng";
        Class.forName ("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection(url, userName, password);
        stmt = conn.createStatement();
      }catch (Exception e) { System.out.println ("Cannot connect to database server"); }
   }
   
   public void agregar(){
      try {
         String s = "INSERT INTO USUARIO (nombre, nombre_usuario, contrasena, contacto, direccion, estatus)" +
                   " VALUES ('"+ nombre + "' , '" + nombreUsuario + "', '" + contrasena + "', '" + contacto + "', '" + direccion + "', '"+estatus+"' )";
         System.out.println(s); 
         stmt.executeUpdate(s);
      }catch (Exception e) { System.out.println ("Cannot update database" + e ); }   
   } 
   
    public void actualizar(String nombre, String usuario, String contrasena, String contacto, String direccion, String nombreAntiguo){
       try{
       String s = "UPDATE USUARIO SET nombre = '"+ nombre +"', nombre_usuario = '"+ usuario +"', contrasena ='"+contrasena+"', contacto = '"+contacto
               +"', direccion = '"+ direccion +"' WHERE nombre = '"+nombreAntiguo+"'";
       System.out.println(s); 
         stmt.executeUpdate(s);
      }catch (Exception e) { System.out.println ("Cannot update database" + e ); }  
   }
   
   public void eliminar(String id){
        try{
       String s = "UPDATE USUARIO SET estatus = '2' WHERE id_usuario = "+ id;
       System.out.println(s); 
         stmt.executeUpdate(s);
      }catch (Exception e) { System.out.println ("Cannot update database" + e ); }  
   }
   
   public void actualizarConsejo(){
        try{
       String s = "UPDATE USUARIO, AUTOR SET estatus = '1' WHERE id_usuario = id_autor AND votos >= 3";
       System.out.println(s); 
         stmt.executeUpdate(s);
      }catch (Exception e) { System.out.println ("Cannot update database" + e ); }  
   }
   
   public LinkedList getConsejo(){
       LinkedList consejo;
       consejo = new LinkedList();
       
        try {
         stmt.executeQuery ("SELECT nombre, nombre_usuario, id_usuario FROM usuario WHERE estatus = 1");
         ResultSet rs = stmt.getResultSet();
        // rs.next(); //Va al registro ya validado
         while(rs.next()){
            consejo.add(rs.getString("nombre"));
            consejo.add(rs.getString("nombre_usuario"));
            consejo.add(rs.getString("id_usuario"));
         }
         rs.close();
         return consejo;
      } catch (SQLException e) {System.out.println ("Cannot getNombres()" + e);}
        return consejo;
   }
      
    public LinkedList getNombres(){
    LinkedList usuarios;
    usuarios = new LinkedList();
        
      try {
         stmt.executeQuery ("SELECT nombre, nombre_usuario, contacto, contrasena, direccion FROM usuario");
         ResultSet rs = stmt.getResultSet();
        // rs.next(); //Va al registro ya validado
         while(rs.next()){
            usuarios.add(rs.getString("nombre"));
            usuarios.add(rs.getString("nombre_usuario"));
            usuarios.add(rs.getString("contacto"));
            usuarios.add(rs.getString("contrasena"));
            usuarios.add(rs.getString("direccion"));
         }
         rs.close();
         return(usuarios);
      } catch (SQLException e) {System.out.println ("Cannot getNombres()" + e);}
      return usuarios;
   }
   
       public Usuario validaUsuario(){
        try{
            String query="SELECT * FROM usuario where nombre_usuario='"+nombreUsuario+"' AND contrasena='"+contrasena+"'";
            stmt.executeQuery(query);
            System.out.println(query);

            ResultSet rs= stmt.getResultSet();
            if(rs.next()){
                setIdUsuario(rs.getInt("id_usuario"));
                setNombre(rs.getString("nombre"));
                setNombreUsuario(rs.getString("nombre_usuario"));
                setContrasena(rs.getString("contrasena"));
                setContacto(rs.getString("contacto"));
                setFechaRegistro(rs.getString("fecha_registro"));
                setDireccion(rs.getString("direccion"));
                setEstatus(rs.getInt("estatus"));
                return this;
            }
            else{
                System.out.println("entre mal");
                return null;
            }
        }
        catch (SQLException e){
            return null;
        }
    }
    
    public String validaUserName(){
        try{
            String query= "SELECT * FROM usuario where nombre_usuario='"+nombreUsuario+"';";
            stmt.executeQuery(query);
            ResultSet rs= stmt.getResultSet();
            if(rs.next()){
                return "no disponible";
            }
            else{
                return "disponible";
            }
        }
        catch(Exception e){
            return "no disponible";
        }
    }
    
    public String getContacto() {
        return contacto;
    }

    public void setContacto(String contacto) {
        this.contacto = contacto;
    }

    public String getContrasena() {
        return contrasena;
    }

    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(String fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public int getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }
    public int getEstatus() {
        return estatus;
    }

    public void setEstatus(int estatus) {
        this.estatus = estatus;
    }    
    
}
